EventBridge Scheduler で ECS タスクの起動と停止を自動化してみた

EventBridge Scheduler で ECS タスクの起動と停止を自動化してみた

EventBridge Scheduler で ECS サービスのタスク数の自動的な増減を設定してみました
Clock Icon2023.09.07

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

アノテーション・テクニカルサポートチームの hato です。
Amazon EventBridge Scheduler を使うと、ECS サービスで実行している ECS タスクの起動・停止を自動化できます。

自動起動停止は、コスト削減の観点から方法についてお問い合わせ頂くこともありますが、触ったことがなかったので、やってみました。

やってみた

前提

  • ECS クラスターや ECS サービスは作成済み
  • ECS サービスの必要数(desiredCount)が毎朝08:00に1、18:00 に0になるスケジュールを設定します。
  • タスク数の制御は ECS サービスによって行われます。

手順

  1. EventBridge Scheduler 用の IAM ロールを作成
  2. 起動用のスケジュールを作成
  3. 停止用のスケジュールを作成

EventBridge Scheduler 用の IAM ロールを作成

Amazon EventBridge Scheduler に設定する IAM ロールを作成します。

必要な権限としては ECS サービスの設定変更(ecs:UpdateService)となりますが、 今回は AWS 管理ポリシーAmazonECS_FullAccessを使用しています。

IAM コンソール を開き、ロールから「ロールを作成」をクリックします。

信頼されたエンティティタイプから「カスタム信頼ポリシー」を選択します。

カスタム信頼ポリシー(赤枠で囲った部分)に、次の信頼ポリシーを入力します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "scheduler.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

「次へ」をクリックします。

許可ポリシーからAmazonECS_FullAccessを選択して、「次へ」をクリックします。

ロール名に任意の名前(例:ECSSchedulerExecutionRole)を指定して、「ロールを作成」をクリックします。

IAM ロールが正常に作成されたことを確認します。

起動用のスケジュールを作成

EventBridge コンソール を開き「スケジュールを作成」をクリックします。

スケジュール名に任意の名前(例:hato-ecs-start-schedule)を入力して、頻度から「定期的なスケジュール」をクリックします。

次の値を指定します。

  • cron 式:起動したいスケジュール
  • フレックスタイムウィンドウ *1:任意の値(例:オフ)

「次へ」をクリックします。
※必要に応じて「タイムゾーン」を修正してください。

ターゲット API セクションから「すべての API」を選択しECSで検索、「Amazon ECS」を選択します。

UpdateServiceで検索し、「UpdateService」を選択します。

入力(赤枠で囲った部分)に、次のパラメータを入力します。
DesiredCountは必要に応じて修正してください。

{ 
    "Cluster": "<ECSクラスター名>",
    "Service": "<ECSサービス名>", 
    "DesiredCount": 1
}

「次へ」をクリックします。

「既存の役割を選択」から作成した IAM ロール(例:ECSSchedulerExecutionRole)を選択し、「次へ」をクリックします。

「スケジュールを作成」をクリックします。

スケジュールが正常に作成されたことを確認します。

停止用のスケジュールを作成

同様に停止用のスケジュールも作成しますが、起動時のスケジュールからの変更等としては

  • スケジュール名
  • cron 式

  • 入力(DesiredCount

のみとなるため、手順は割愛します。

実際の挙動

設定したタイミングになると自動的に ECS タスクが起動し、時間になると停止します。
※画像の場合、動作検証のためタイミング(13:05起動、13:10停止)を変更しています。

参考資料

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。

脚注

  1. オンにすると、指定された時間とフレックスタイムウィンドウの時間内のどこかのタイミングで実行されます

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.